package Extends;/*
 *
 * @author 陈粒
 * @version 创建时间：2021/7/7 10:58
 */

/**
 * 向上转型或上溯造型：父类的引用指向子类对象
 * 向下转型或下溯造型：子类的引用的指向子类对象，过程中必须要采取到强制转型。
 * 注意：只有曾经上溯造型过的对象才能进行下溯造型
 * 优点和缺点：上溯造型的优点是用户可以把不同类型的子类上溯为同一个父类造型，以方便地统一处理它们；
 * 缺点是损失掉了子类新扩展增加的属性和方法（重写父类的方法不会损失掉），除非再进行下溯造型，否则这部分属性和方法不能被访问
 */
public class Transformation {
    public static void main(String[] args) {
        Animal a = new Dog();//上溯造型或叫向上转型
        a.eat();//执行子类Dog重写的方法
        //a.run(); //该语句无法执行，是子类新增的类
        Dog b = (Dog) a;//下溯造型或叫向下转型
        b.run();//执行类型Dog新增的方法
    }
}

class Animal {
    void eat() {
        System.out.println("Animal类吃东西");
    }
}

class Dog extends Animal {
    void eat() {
        System.out.println("Dog类吃东西");
    }

    void run() {
        System.out.println("Dog类奔跑");
    }
}